package com.ai.dmc.index.common.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

/**
 * 
 * @Description : 日期工具类
 * 
 * @author : wucm
 * @date : 2015年4月6日 上午11:08:15
 * @version V1.0
 * 
 */
public class DateUtil {

	private static DateUtil ldu_ = null;

	public static DateUtil getInstance() {
		if (ldu_ == null) {
			ldu_ = new DateUtil();
		}
		return ldu_;
	}

	/**
	 * 
	 * @Description : 返回上周同日
	 * 
	 * @param dateFormat
	 *            日期格式例如：yyyyMMddHHmmss
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午11:01:23
	 * 
	 */
	public String getLastWeek(String dateStr, String dateFormat) {
		return convertDate(dateStr, dateFormat, Calendar.DAY_OF_YEAR, -7);
	}

	/**
	 * 
	 * @Description : 返回上月同日
	 * 
	 * @param dateFormat
	 *            日期格式例如：yyyyMMddHHmmss
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午11:02:14
	 * 
	 */
	public String getLastMonth(String dateStr, String dateFormat) {
		return convertDate(dateStr, dateFormat, Calendar.MONTH, -1).substring(0,
				8);
	}

	/**
	 * 
	 * @Description : 获取相隔指定月份的日期
	 * 
	 * @return String
	 *
	 * @author : menxl
	 * @date : 2015-11-18 下午5:24:41
	 *
	 */
	public String getOtherMonth(String dateStr, String dateFormat,
			int monthNum) {
		return convertDate(dateStr, dateFormat, Calendar.MONTH, monthNum);
	}

	/**
	 * 
	 * @Description : 返回今天
	 * 
	 * @param dateFormat
	 *            日期格式例如：yyyyMMddHHmmss
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午10:52:56
	 * 
	 */
	public String getToday(String dateFormat) {
		SimpleDateFormat formatter = new SimpleDateFormat(dateFormat,
				Locale.CHINESE);
		Date thedate = new Date();
		return formatter.format(thedate);
	}

	/**
	 * 
	 * @Description : 返回昨天
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午11:05:08
	 * 
	 */
	public String getYesterday(String todaystr, String dateFormat) {
		return convertDate(todaystr, dateFormat, Calendar.DAY_OF_YEAR, -1);
	}

	/**
	 * 
	 * @Description : 计算相对于dateStr的日期
	 * 
	 * @param dateStr
	 *            当前日期
	 * @param dateFormat
	 *            当前日期的格式
	 * @param feild
	 *            处理类型，例如Calendar.DAY_OF_YEAR
	 * @param num
	 *            0当前，1往后，-1往前
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午10:43:00
	 * 
	 */
	public String convertDate(String dateStr, String dateFormat, int feild,
			int num) {
		String s = null;
		try {
			SimpleDateFormat formatter = new SimpleDateFormat(dateFormat,
					Locale.CHINESE);
			Calendar calendar = new GregorianCalendar();
			Date date = formatter.parse(dateStr);
			calendar.setTime(date);
			calendar.add(feild, num);
			Date dateResult = calendar.getTime();

			if (dateResult == null) {
				s = formatter.format(date);
			} else {
				s = formatter.format(dateResult);
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}

		return s;
	}

	/**
	 * 
	 * @Description : 返回几天前或者几天后
	 * @param dateFormat
	 *            日期格式例如：yyyyMMddHHmmss
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午11:08:28
	 * 
	 */
	public String getXDay(String todaystr, String dateFormat, int x) {
		return convertDate(todaystr, dateFormat, Calendar.DAY_OF_YEAR, x);
	}

	/**
	 * 
	 * @Description : 返回几小时前或者几小时后
	 * @param dateFormat
	 *            日期格式例如：yyyyMMddHHmmss
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午11:08:28
	 * 
	 */
	public String getXHour(String todaystr, String dateFormat, int x) {
		return convertDate(todaystr, dateFormat, Calendar.HOUR_OF_DAY, x);
	}

	/**
	 * 
	 * @Description : 返回几分钟前或者几分钟后
	 * @param dateFormat
	 *            日期格式例如：yyyyMMddHHmmss
	 * 
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年11月12日 上午11:08:28
	 * 
	 */
	public String getXMinute(String todaystr, String dateFormat, int x) {
		return convertDate(todaystr, dateFormat, Calendar.MINUTE, x);
	}

	/**
	 * 日期格式转换
	 * 
	 * @param date
	 * @param format
	 *            日期格式例如：yyyyMMddHHmmss
	 * 
	 * @return
	 */
	public String dateFormat(String date, String oldFormat, String newFormat) {
		SimpleDateFormat sdf = new SimpleDateFormat(oldFormat, Locale.CHINESE);
		SimpleDateFormat sdf2 = new SimpleDateFormat(newFormat, Locale.CHINESE);
		String date2 = null;
		try {
			date2 = sdf2.format(sdf.parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date2;
	}

	/**
	 * 
	 * @Description : 将字符串转换成日期
	 * @param date
	 * @param format
	 *            日期格式例如：yyyyMMddHHmmss
	 * @return
	 * @return Date
	 * 
	 * @author : wucm
	 * @date : 2015年7月13日 下午5:37:54
	 * 
	 */
	public Date toDate(String date, String format) {
		SimpleDateFormat formatter = null;
		Date date1 = null;
		try {
			formatter = new SimpleDateFormat(format, Locale.CHINESE);
			date1 = formatter.parse(date);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return date1;
	}

	/**
	 * 
	 * @Description : 日期格式转换
	 * @param date
	 * @param newFormat
	 *            日期格式例如：yyyyMMddHHmmss
	 * @return
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年7月13日 下午5:49:06
	 * 
	 */
	public String dateFormat(Date date, String newFormat) {
		SimpleDateFormat sdf2 = new SimpleDateFormat(newFormat, Locale.CHINESE);
		String date2 = sdf2.format(date);
		return date2;
	}

	public static void main(String[] args) {
		DateUtil du = DateUtil.getInstance();
		/*
		 * String now = du.getToday("yyyy-MM-dd HH:mm"); String s =
		 * du.getXMinute(now, "yyyy-MM-dd HH:mm", 3); System.out.println(s);
		 */

		String today = "201601011115";
		String yesterday = du.getXDay(today, "yyyyMMddhhmm", -1);
		String lastday = du.getXDay(today, "yyyyMMddhhmm", -2);

		System.out.println(today.substring(0, 4) + "-" + today.substring(4, 6)
				+ "-" + today.substring(6, 8));
		System.out.println(yesterday.substring(0, 4) + "-"
				+ yesterday.substring(4, 6) + "-" + yesterday.substring(6, 8));
		System.out.println(lastday.substring(0, 4) + "-"
				+ lastday.substring(4, 6) + "-" + lastday.substring(6, 8));
	}
}
